/* Universidad del Valle de Guatemala
 * Facultad de Ingenieria
 * Departamento de Ciencias de la Computacion
 * Algoritmos y estructura de Datos
 * David Coronado, 07325
 * Node:
 *      representa un nodo en el arbol
 */

public class Node {

	public char charac;
	public int frecuency;
	public String code;
	public Node right, left;
	public Node leftSon, rightSon;
	public boolean type;

	/**
	 * Se inicializa el caracter, su frecuencia y su tipo
	 * @param letra
	 * @param frecuencia
	 * @param tipo
	 */
        
	public Node(char chr, int frec, boolean type){
		this.charac=chr;
		this.frecuency=frec;
		this.type=type;
		code="";
	}

	/**
	 * Setea el codigo huffman al Nodo
	 * @param codigo 
	 */
	public void setCode(String codigo){
		this.code=codigo;
	}

	/**
	 * Devuelbe el hijo Izquierdo del nodo
	 * @return un Nodo
	 */
	public Node getLeftSon() {
		return leftSon;
	}

	/**
	 * Permite aÃ±adir el hijo izquierdo del Nodo
	 * @param hijoIzq Es el Nodo a aÃ±adir
	 */
	public void setLeftSon(Node leftSon) {
		this.leftSon = leftSon;
	}

	/**
	 * Devuelve el hijo derecho del Nodo
	 * @return un Nodo
	 */
	public Node getRightSon() {
		return rightSon;
	}

	/**
	 * Permite aÃ±adir el hijo derecho del nodo
	 * @param hijoDer un nood
	 */
	public void setRightSon(Node rightSon) {
		this.rightSon = rightSon;
	}
	/**
	 * Devuelve el hijo derecho del nodo
	 * @return un nodo
	 */
	public Node getRight() {
		return right;
	}

	/**
	 * Permite aÃ±adir un nodo a la derecha del nodo
	 * @param derecha el nuevo nodo
	 */
	public void setRight(Node right) {
		this.right = right;
	}
	/**
	 * Devuelve el nodo izquierda
	 * @return un nodo
	 */
	public Node getLeft() {
		return left;
	}
	/**
	 * AÃ±ade un nodo a la izquierda
	 * @param izquierda el nuevo nodo
	 */
	public void setLeft(Node left) {
		this.left =  left;
	}
	/**
	 * Devuelve la letra que representa el Nodo
	 * @return una letra
	 */
	public char getCharac() {
		return charac;
	}
	/**
	 * Permite asignar una nuva letra al Nodo
	 * @param letra la letra nueva
	 */
	public void setCharac(char charac) {
		this.charac = charac;
	}
	/**
	 * Obtiene la frecuencia del Nodo
	 * @return un entero
	 */
	public int getFrecuency() {
		return frecuency;
	}
	/**
	 * Permite asignar la frecuencia de un nodo
	 * @param frecuencia
	 */
	public void setFrecuency(int frecuency) {
		this.frecuency = frecuency;
	}
	/**
	 * devuelve el codigo huffman del Nodo
	 * @return un string de codigo
	 */
	public String getCode() {
		return code;
	}
	/**
	 * Devuelve el tipo del nodo
	 * @return
	 */
	public boolean isType() {
		return type;
	}
	/**
	 * Asigna el tipo a un nodo
	 * @param tipo el nuevo tipo
	 */
	public void setType(boolean type) {
		this.type = type;
	}


}
